package com.lv.common.base

import android.app.Application
import android.content.Context
import android.content.pm.PackageInfo
import com.blankj.utilcode.util.LogUtils
import com.lv.common.utils.MyUtils
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import org.koin.core.logger.Level

/**
 * 作者： ygx
 * 创建日期：2022/1/20 9:29 PM
 * 签名： 天行健，君子以自强不息；地势坤，君子以厚德载物。
 *      _              _           _     _   ____  _             _ _
 *     / \   _ __   __| |_ __ ___ (_) __| | / ___|| |_ _   _  __| (_) ___
 *    / _ \ | '_ \ / _` | '__/ _ \| |/ _` | \___ \| __| | | |/ _` | |/ _ \
 *   / ___ \| | | | (_| | | | (_) | | (_| |  ___) | |_| |_| | (_| | | (_) |
 *  /_/   \_\_| |_|\__,_|_|  \___/|_|\__,_| |____/ \__|\__,_|\__,_|_|\___/
 *
 * You never know what you can do until you try !
 * ----------------------------------------------------------------
 * 抽象的公用BaseApplication
 */
abstract class BaseApplication : Application() {
    companion object {
        var _context: Application? = null
        var _versionCode: Int = 0
        var _versionName: String = ""
        fun getContext(): Context {
            return _context!!
        }
    }

    override fun onCreate() {
        super.onCreate()
        _context = this
        startKoin {
            androidLogger(Level.ERROR)//目前已知bug，除了level.error外，使用androidlogger会导致崩溃
            //context
            androidContext(this@BaseApplication)

        }
        MyUtils.init(this)
        initConfig()
        initData()

        LogUtils.d("BaseApplication onCreate")
        getLocalVersion()
        getLocalVersionName()
    }

    /**
     * 可用于必要的配置初始化
     */
    protected open fun initConfig() {}

    /**
     * 可用于子类实现必要的数据初始化
     */
    protected open fun initData() {}

    /**
     *
     * 获取本地软件版本
     *
     */
    fun getLocalVersion(): Int {
//        var localVersion = 0

        try {
            val packageInfo: PackageInfo = packageManager.getPackageInfo(packageName, 0)
            _versionCode = packageInfo.versionCode
//            LogUtils.e("TAG", "本软件的版本。。$_versionCode")
        } catch (e: Exception) {
        }

        return _versionCode
    }

    /**
     *
     * 获取本地软件版本名称
     *
     */
    fun getLocalVersionName(): String? {
//        var localVersion = ""
        try {
            val packageInfo: PackageInfo = packageManager.getPackageInfo(packageName, 0)

            _versionName = packageInfo.versionName
//            LogUtils.e("TAG", "本软件的版本。。$_versionName")
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return _versionName
    }


}